home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor2 / patch.doc < prev    next >
Text File  |  1995-03-31  |  5KB  |  98 lines

  1. (Comp.sys.hp48) 
  2. Item: 1207 by flavio@cflav.sublink.org [Flavio Casetta] 
  3.   Subj: MatrixWriter bug explained & eliminated 
  4.   Date: Fri Jun 05 1992 
  5.  
  6. Éíííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí» 
  7. º CAUTION!!!  USE THIS PROGRAM ONLY IF YOUR HP48 IS REV 'A' THROUGH 'E' !!!! º 
  8. º                                                                            º 
  9. º DO *NOT* RUN THIS PROGRAM ON A REV 'J' MACHINE (OR HIGHER)!!!!             º 
  10. º                                                                            º 
  11. º THE BUG THAT THIS PROGRAM IS INTENDED TO FIX WAS FIXED IN REV J,           º 
  12. º SO REV J OWNERS (AND HIGHER) DO NOT NEED THIS PROGRAM ANYWAY.  -jkh-       º 
  13. èíííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííííí¼ 
  14.  
  15. úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  16. 3 Mini-instructions: *AFTER* pressing blue-ENTER (to start the 3 
  17. 3 MatrixWriter) press VAR PATCH ENTER.  Bug will be eliminated.3 
  18. àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  19.  
  20. mgcomms@cix.COMpulink.co.UK (Mercantile and General PLC) writes: 
  21.  
  22. >  
  23. > Has anyone found a simple work-around for the bug in the matrix 
  24. > environment?  The bug is any cell containing an absolute value 
  25. > between 1E5 and 1E6 can't be copied to the stack.  (there's a beep 
  26. > and no other response). 
  27. >  
  28.  
  29. Dear 48er, 
  30.  
  31. On the wave of your request, I investigated the strange bug of the  
  32. MatrixWriter. 
  33. The Symbolic MatrixWriter built in the SmartROM is not affected by this bug. 
  34. The reason is quite simple: we rewrote all the storage/retrieval system of 
  35. the MatrixWriter in order to allow symbolics. 
  36.  
  37. But what about the original MatrixWriter ? 
  38.  
  39. Here is the answer. 
  40.  
  41. It took me more than 20 minutes to find out the source of the problem. 
  42. In effect it's hard to say if the bug is due to a subroutine misbehavior or to 
  43. a misuse of that subroutine. 
  44.  
  45. Things are as follows: 
  46.  
  47. when you press [->STK] a subroutine recalls the current matrix (or vector)  
  48. along with the cursor coordinates. 
  49. Then a subroutine extracts the element from the matrix according with the  
  50. actual dimension of the array. 
  51. If the element does not exist it returns a null string. 
  52. Then a subroutine checks for the presence of a null string. 
  53. And here is the pitfall ! 
  54. The routine checking for the null string does not attempt to check in advance 
  55. the object type lying on the stack. Numbers in the range 100000-999999 have  
  56. the first five nibbles (3 of exponent and 2 of mantissa) matching the null  
  57. string pattern. Try out with ->ASC ! 
  58. Nevertheless the bug applies also to Complex numbers within the Real part in 
  59. the same range. 
  60. In effect if you supply a number like 100000.111111, you will find that the 
  61. [->STK] works because the last two digits of the mantissa are no longer zeros. 
  62. Thus the actual range of numbers is 100000-999999 rounded to 10 decimal  
  63. significant digits. 
  64.  
  65. In conclusion the bug is due to a call to a subroutine whose expected argument 
  66. is a string and not a number. 
  67. The main routine is located at #63209h and always returns the original object  
  68. plus a flag. 
  69. A TRUE means that the string is null, a FALSE means it is not null. 
  70. Notice that it is not a buggy routine. Simply it should not be called unless 
  71. you have a string on the stack. 
  72.  
  73. I don't see a possible workaround in the usual sense of the word, unless you 
  74. enter all numbers with at least 11 significant digits. 
  75. What can be done is a patch routine in RAM consisting of a menu that fixes 
  76. the problem. 
  77.  
  78. úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ 
  79. 3 Please keep in mind that when the Matrix Writer is not running,3 
  80. 3 you may corrupt the memory by calling any of these subroutines.3 
  81. àÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄù 
  82.  
  83. In order to use it, store the new menu in the global name 'PATCH'  
  84. and call it from the matrix writer environment as follows: 
  85. PATCH [ENTER]. 
  86.  
  87. PATCH simply changes the aforementioned routine with 62154h which 
  88. returns FALSE if the object is not a string. 
  89.  
  90. Remember that when you press [BLUE] [ENTER] you restore the OLD menu ! 
  91.  
  92. Hope it helps 
  93. __________________________________________________________________________ 
  94. flavio@cflav.sublink.org (Flavio Casetta) 
  95. In HP we trust.                      HP Fanatics <==> Imagination at work ! 
  96.                                          VOICE +59 440404    FAX +59 304490 
  97.                                         Via Varese 67   41100 Modena  Italy 
  98.